package com.redis.test02;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;

import java.util.Collections;

/**
 * 作者: LCG
 * 日期: 2019/9/10 16:54
 * 描述:
 */
public class MyRedisUtil {

    public static boolean findId(String key,String value, RedisTemplate redisTemplate){


         String lua="if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end";

         DefaultRedisScript<Long> defaultRedisScript=new DefaultRedisScript<>();
         defaultRedisScript.setResultType(Long.class);
         defaultRedisScript.setScriptText(lua);

        Object execute = redisTemplate.execute(defaultRedisScript, Collections.singletonList(key), value);

        if(execute.toString().equals("1")){
           return true;
        }else{
           return false;
        }
    }

    /**
     * 获取锁
     * @param key
     * @param requestid
     * @param redisTemplate
     * @param timeout
     * @return
     */
    public static boolean getLock(String key,String requestid,RedisTemplate redisTemplate,String timeout){

        String getlock="if redis.call('setNx',KEYS[1],ARGV[1]) ~= 1 then return 12 else return redis.call('expire',KEYS[1],ARGV[2]) end ";

        DefaultRedisScript<Long> defaultRedisScript=new DefaultRedisScript();
        defaultRedisScript.setScriptText(getlock);
        defaultRedisScript.setResultType(Long.class);

        Object execute = redisTemplate.execute(defaultRedisScript, Collections.singletonList(key), requestid, timeout);

        System.out.println("-----"+execute.toString());

        if(execute!=null&&execute.toString().equals("1")){
            return true;
        }else{
            return false;
        }

    }


    public static boolean unLock(String key,String requestId,RedisTemplate redisTemplate){

        String unlock="if redis.call('get',KEYS[1])== ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end";

        DefaultRedisScript<Long> defaultRedisScript=new DefaultRedisScript();
        defaultRedisScript.setScriptText(unlock);
        defaultRedisScript.setResultType(Long.class);

        Object execute = redisTemplate.execute(defaultRedisScript, Collections.singletonList(key), requestId);

        if(execute!=null&&execute.toString().equals("1")){
            return true;
        }else{
            return false;
        }

    }


}
